home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / libg_261.zip / libg_261 / libg++ / gperf / tests / test-4.exp < prev    next >
Text File  |  1992-12-21  |  5KB  |  139 lines

  1. /* C code produced by gperf version 2.5 (GNU C++ version) */
  2. /* Command-line: ../src/gperf -D -p -t  */
  3. /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
  4. struct resword { char *name; short token; enum rid rid; };
  5.  
  6. #define TOTAL_KEYWORDS 51
  7. #define MIN_WORD_LENGTH 2
  8. #define MAX_WORD_LENGTH 13
  9. #define MIN_HASH_VALUE 4
  10. #define MAX_HASH_VALUE 82
  11. /* maximum key range = 79, duplicates = 2 */
  12.  
  13. static unsigned int
  14. hash (str, len)
  15.      register char *str;
  16.      register int unsigned len;
  17. {
  18.   static unsigned char asso_values[] =
  19.     {
  20.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  21.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  22.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  23.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  24.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  25.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  26.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  27.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  28.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  29.      83, 83, 83, 83, 83,  0, 83, 40, 20, 50,
  30.      25, 10, 30,  0,  0, 50, 83,  0, 15,  0,
  31.      35,  0, 83, 83, 20,  0, 10, 40,  5, 15,
  32.      83, 83, 83, 83, 83, 83, 83, 83,
  33.     };
  34.   return len + asso_values[str[len - 1]] + asso_values[str[0]];
  35. }
  36.  
  37. struct resword *
  38. in_word_set (str, len)
  39.      register char *str;
  40.      register unsigned int len;
  41. {
  42.   static struct resword wordlist[] =
  43.     {
  44.       {"",}, {"",}, {"",}, {"",}, 
  45.       {"goto",  GOTO, NORID},
  46.       {"__asm",  ASM, NORID},
  47.       {"switch",  SWITCH, NORID},
  48.       {"__asm__",  ASM, NORID},
  49.       {"__const__",  TYPE_QUAL, RID_CONST},
  50.       {"__inline__",  SCSPEC, RID_INLINE},
  51.       {"__typeof__",  TYPEOF, NORID},
  52.       {"__signed__",  TYPESPEC, RID_SIGNED},
  53.       {"__alignof__",  ALIGNOF, NORID},
  54.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
  55.       {"__attribute__",  ATTRIBUTE, NORID},
  56.       {"enum",  ENUM, NORID},
  57.       {"short",  TYPESPEC, RID_SHORT},
  58.       {"struct",  STRUCT, NORID},
  59.       {"__const",  TYPE_QUAL, RID_CONST},
  60.       {"__inline",  SCSPEC, RID_INLINE},
  61.       {"long",  TYPESPEC, RID_LONG},
  62.       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
  63.       {"__attribute",  ATTRIBUTE, NORID},
  64.       {"volatile",  TYPE_QUAL, RID_VOLATILE},
  65.       {"else",  ELSE, NORID},
  66.       {"break",  BREAK, NORID},
  67.       {"do",  DO, NORID},
  68.       {"while",  WHILE, NORID},
  69.       {"signed",  TYPESPEC, RID_SIGNED},
  70.       {"__signed",  TYPESPEC, RID_SIGNED},
  71.       {"void",  TYPESPEC, RID_VOID},
  72.       {"sizeof",  SIZEOF, NORID},
  73.       {"__typeof",  TYPEOF, NORID},
  74.       {"__alignof",  ALIGNOF, NORID},
  75.       {"double",  TYPESPEC, RID_DOUBLE},
  76.       {"default",  DEFAULT, NORID},
  77.       {"asm",  ASM, NORID},
  78.       {"auto",  SCSPEC, RID_AUTO},
  79.       {"float",  TYPESPEC, RID_FLOAT},
  80.       {"typeof",  TYPEOF, NORID},
  81.       {"typedef",  SCSPEC, RID_TYPEDEF},
  82.       {"register",  SCSPEC, RID_REGISTER},
  83.       {"extern",  SCSPEC, RID_EXTERN},
  84.       {"for",  FOR, NORID},
  85.       {"static",  SCSPEC, RID_STATIC},
  86.       {"return",  RETURN, NORID},
  87.       {"int",  TYPESPEC, RID_INT},
  88.       {"case",  CASE, NORID},
  89.       {"const",  TYPE_QUAL, RID_CONST},
  90.       {"inline",  SCSPEC, RID_INLINE},
  91.       {"continue",  CONTINUE, NORID},
  92.       {"unsigned",  TYPESPEC, RID_UNSIGNED},
  93.       {"char",  TYPESPEC, RID_CHAR},
  94.       {"union",  UNION, NORID},
  95.       {"if",  IF, NORID},
  96.     };
  97.  
  98.   static char lookup[] =
  99.     {
  100.         -1,  -1,  -1,  -1,   4,   5,   6,   7,  -1,   8, 100,  12,  13,  14,
  101.         15,  16,  17,  18,  19,  20,  21,  22,  -1,  23,  24,  25,  -1,  26,
  102.         -9,  -3,  27,  28,  -1,  29,  30,  -1,  31,  -1,  32,  33,  -1,  34,
  103.         35,  36,  37,  38,  39,  40,  41,  -1,  -1,  42,  -1,  43,  -1,  -1,
  104.         44,  -1,  -1,  -1,  -1,  45,  -1,  46,  47,  48,  49,  -1,  50,  -1,
  105.         -1,  -1,  -1,  51,  52,  -1,  -1,  -1,  -1,  -1,  53,  -1,  54,
  106.     };
  107.  
  108.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  109.     {
  110.       register int key = hash (str, len);
  111.  
  112.       if (key <= MAX_HASH_VALUE && key >= 0)
  113.         {
  114.           register int index = lookup[key];
  115.  
  116.           if (index >= 0 && index < MAX_HASH_VALUE)
  117.             {
  118.               register char *s = wordlist[index].name;
  119.  
  120.               if (*s == *str && !strcmp (str + 1, s + 1))
  121.                 return &wordlist[index];
  122.             }
  123.           else if (index < 0 && index >= -MAX_HASH_VALUE)
  124.             return 0;
  125.           else
  126.             {
  127.               register int offset = key + index + (index > 0 ? -MAX_HASH_VALUE : MAX_HASH_VALUE);
  128.               register struct resword *base = &wordlist[-lookup[offset]];
  129.               register struct resword *ptr = base + -lookup[offset + 1];
  130.  
  131.               while (--ptr >= base)
  132.                 if (*str == *ptr->name && !strcmp (str + 1, ptr->name + 1))
  133.                   return ptr;
  134.             }
  135.         }
  136.     }
  137.   return 0;
  138. }
  139.